/*
 * Server.h
 *
 *  Created on: 30/04/2011
 *      Author: dela
 */

#ifndef SERVER_H_
#define SERVER_H_

#include <list>
#include "Connection.h"
#include "Mutex.h"
#include "Socket.h"
#include "../dominio/Juego.h"

class Server {
private:
	int port;
	Socket aSocket;
	bool working;
	Mutex workingMutex;
	std::list<Connection*> connections;
	Mutex connMutex;
	Juego *juego;
	string pathJuego;

	bool gameStart;
	Mutex gameStartMutex;
	pthread_cond_t gameStartCond;

	int connectionCount;

	bool isWorking();

	/**
	 * Inicializa el servidor.
	 */
	void init();

	void startGame();

	void shutdownConnections();
public:
	Server( int port, Juego *juego, string pj, int cc) : aSocket(port), working(true), pathJuego(pj), cantidadDeJugadores(cc) {this->juego = juego; this->port=port; connectionCount = 0;};
	virtual ~Server() {};

	void setPort(int port) {this->port = port;};

	void setWorking(bool working);
	/**
	 * Finaliza el servidor.
	 */
	void serverShutdown();

	void run();

	/**
	 * Elimina las conecciones que ya no estan en uso.
	 */
	void clearConnections();

	int cantidadDeJugadores;
};

#endif /* SERVER_H_ */
